﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QLCONGNOLIBS.Ultils;
using QLCONGNOLIBS.Securities;

namespace QLCONGNOLIBS.Models
{
    public class UsersModels{
        //1. Datafield
        private SqlConnection m_objConnection;
        private SqlCommand m_objCommand;
        private SqlDataAdapter m_objAdapter;
        private DataTable m_objTable;
        private SecurityEntity m_objSecurity;  

        //2. Khai báo các thủ tục sẽ sử dụng
        private const string CHECK_LOGIN = "SP_CHECKLOGIN";
        private const string GET_HOC_VIEN = "SP_HIEN_THI_THANHVIEN";
        private const string INSERT_HOC_VIEN = "SP_INSERT_THANHVIEN";
        private const string UPDATE_HOC_VIEN = "SP_UPDATE_THANHVIEN";
        private const string DELETE_HOC_VIEN = "SP_DELETE_THANHVIEN";

         //3. Hàm khởi dựng - Constructors
        public UsersModels(SqlConnection objConnection, SecurityEntity objSecurity)
        { 
            //Thiết lập thông tin kết nối cho datafield
            m_objConnection = objConnection;
            m_objSecurity = objSecurity;
        }

        public UsersModels(string connectString)
        {
            //Khởi tạo kết nối với ConnectionString
            m_objConnection = new SqlConnection();
            if (m_objConnection.State == ConnectionState.Closed)
            {
                m_objConnection= ConnectionMans.OpenConnection(connectString);
            }
        }                

        #region "1. Thực thi và nhận về dữ liệu là DataTable"
        /// <summary>
        /// Hiển thị danh sách học viên
        /// </summary>
        /// <returns></returns>
        public Models.DbSetQLCNEn.tblUsersDataTable GetElements()
        {
            DbSetQLCNEn.tblUsersDataTable objTable = new DbSetQLCNEn.tblUsersDataTable();
            try
            {
                m_objCommand = new SqlCommand(GET_HOC_VIEN, m_objConnection);
                m_objCommand.CommandType = CommandType.StoredProcedure;
                m_objAdapter = new SqlDataAdapter(m_objCommand);
                m_objAdapter.Fill(objTable);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return objTable;
        }
        #endregion

        #region "2. Thực thi nghiệp vụ kiểm tra tài khoản"
        /// <summary>
        /// Kiem tra thong tin nguoi dung
        /// </summary>
        /// <param name="userName">Tên truy cập</param>
        /// <param name="passWord">Mật khẩu</param>
        /// <returns>True - Thông tin tài khoản đúng; False - Không đúng</returns>
        public DataTable CheckElement(string userName, string passWord)
        {
            DataTable objTable;
            try
            {
                SqlParameter[] param = new SqlParameter[2];                
                param[0] = (new BUltils()). CreateParammeter("@userName", userName);
                param[1] = (new BUltils()).CreateParammeter("@passWord",SecurityConexts.EncryptInfo(passWord));

                //Thực thi truy vấn thông qua Store Procedure
                objTable = new DataTable();
                BUltils obj = new BUltils(m_objConnection);
                objTable = obj.ExecProcReturnTable(CHECK_LOGIN, param);

                //True
                if (objTable.Rows.Count > 0)
                {
                    DataRow row = objTable.Rows[0];
                    m_objSecurity.LoginSuccess = true;
                    m_objSecurity.UserName = userName;
                    m_objSecurity.FullName = "" + row["FullName"];
                    m_objSecurity.Email = "" + row["Email"];
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return objTable;
        }
        #endregion
    }
}
